package com.itheima.springbootwebtlias.controller;


import com.itheima.springbootwebtlias.pojo.Dept;
import com.itheima.springbootwebtlias.pojo.Result;
import com.itheima.springbootwebtlias.service.DeptService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;

/**
 * 部门处理：处理部门相关的请求
 */
@Slf4j   // 日志记录注解 lombok提供
@RequestMapping("/depts")
@RestController
public class DeptController {

//    private static final Logger log = LoggerFactory.getLogger(DeptController.class);

    @Autowired
    private DeptService deptService;

    //查询部门列表处理器方法
    //@RequestMapping("/depts")
    @GetMapping
    public Result findAll() {
        //1.请求参数：无

        //2.调用业务层方法，获取部门列表
        List<Dept> deptList = deptService.selectAll();
        //3.封装响应数据
        return Result.success(deptList);
    }

    //删除部门处理器方法
    /*@DeleteMapping("/depts")
    public Result removeById(HttpServletRequest request, @RequestParam(value = "id",required = true) Integer id2, Dept dept, Map map) {
       //方式一：
        //方式二：
        System.out.println("定义变量接收参数：" + id2);
        //方式三：
        System.out.println("定义对象接收参数：" + dept);
        //方式四：
        System.out.println("定义Map对象接收参数：" + map);
        return null;
    }*/
    @DeleteMapping
//    public Result removeById(@RequestParam(value = "id", required = true, defaultValue = "0") Integer id)
    public Result removeById(Integer id) {
        //1.请求参数：id
//        System.out.println("接收到的参数：" + id);
        log.info("接收到的参数：" + id);
        //2.调用业务层方法，删除部门
        deptService.removeById(id);

        //3.封装响应数据
        return Result.success();
    }

    //添加部门处理器方法
    @PostMapping
    public Result save(@RequestBody Dept dept) {
        //1.接收请求参数：json
        //json接收参数：@RequestBody + 实体对象 / Map对象
//        System.out.println("接收到的参数：" + dept);
        log.info("接收到的参数：{}",dept);

        //2.调用业务层Service功能方法，添加部门
        deptService.saveDept(dept);

        //3.封装响应数据
        return Result.success();

    }

    //根据id查询部门处理器方法
    /*@GetMapping("/depts/{id}/{name}/{age}")
    public Result findById(@PathVariable Integer id, @PathVariable String name, @PathVariable Integer age) {
        //1.接收请求参数：@PathVariable 路径参数
        System.out.println("接收到的参数：" + id);
        System.out.println("接收到的参数：" + name);
        System.out.println("接收到的参数：" + age);
        //2.调用业务层方法，根据id查询部门
        Dept dept = deptService.findById(id, name, age);
        //3.封装响应数据
        return Result.success(dept);
    }*/
    @GetMapping("/{id}")
    public Result findById(@PathVariable Integer id) {
        //1.接收请求参数：@PathVariable 路径参数
        log.info("接收到的参数：" + id);
        //2.调用业务层方法，根据id查询部门
        Dept dept = deptService.findById(id);
        //3.封装响应数据
        //code = 1, msg = "success", data = 查询到的部门信息
        return Result.success(dept);
    }

    //修改部门处理器方法
    @PutMapping
    public Result update(@RequestBody Dept dept) {
        //1.接收请求参数：json
        //json接收参数：@RequestBody + 实体对象 / Map对象
        log.info("接收到的请求参数：" + dept);
        //2.调用业务层Service功能方法，修改部门
        deptService.update(dept);

        //3.封装响应数据
        //code = 1, msg = "success", data = null
        return Result.success();
    }
}
